#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

void Test1() 
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	for (size_t i = 0; i < v.size(); i++) // 遍历
	{
		cout << v[i] << " ";
	}
	cout << endl;

	for (size_t i = 0; i < v.size(); i++) 
	{
		v[i] += 1;    // 每个元素+1
		cout << v[i] << " ";
	}
	cout << endl;

	vector<int>::iterator it = v.begin();// 迭代器遍历 自然也可用范围for 不演示了
	while (it != v.end())
	{
		*it -= 1;             // 令每个元素-1
		cout << *it << " ";
		it++;
	}
	cout << endl;
}

void Test2() 
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	vector<int>::iterator ret = find(v.begin(), v.end(), 5);
	// auto ret = find(v.begin(), v.end(), 3);

	if (ret != v.end()) 
	{
		cout << "找到了" << endl;
	}
	else
	{
		cout << "没找到" << endl;
	}
}

void Test3()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

	auto p = find(v.begin(), v.end(), 3);
	if (p != v.end())
	{
		v.erase(p);
	}

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

	v.erase(v.begin());

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

//void Test4()
//{
//	// 正常运行
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);

//	// 要求删除所有的偶数
//	auto it = v.begin();
//	while (it != v.end())
//	{
//		if (*it % 2 == 0)
//		{
//			v.erase(it);
//		}

//		++it;
//	}

//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}

//void Test4()
//{
//	// 崩溃
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);

//	// 要求删除所有的偶数
//	auto it = v.begin();
//	while (it != v.end())
//	{
//		if (*it % 2 == 0)
//		{
//			v.erase(it);
//		}
//		++it;
//	}

//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}

//void Test4()
//{
//	// 结果不对
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(4);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);

//	// 要求删除所有的偶数
//	auto it = v.begin();
//	while (it != v.end())
//	{
//		if (*it % 2 == 0)
//		{
//			v.erase(it);
//		}
//			
//		++it;
//	}

//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}

//void Test4()
//{
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(4);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);

//	// 要求删除所有的偶数
//	auto it = v.begin();
//	while (it != v.end())
//	{
//		if (*it % 2 == 0)
//		{
//			it = v.erase(it);
//		}
//		else
//		{
//			++it;

//		}
//	}

//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}

void Test5()
{
	//std::vector<int> v;
	vector<int> v;
	//v.reserve(10);
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	// 在所有的偶数前面插入一个偶数2倍
	auto it = v.begin();
	while (it != v.end())
	{
		if (*it % 2 == 0)
		{
			it = v.insert(it, *it * 2);
			++it;
			++it;
		}
		else
		{
			++it;
		}
	}

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

void Test6()
{
	// 1 2 3 4
	// 1 2 3 4 5
	// 1 2 2 3 4 5
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(4);

	// 删除所有的偶数
/*	auto it = v.begin();
	while (it != v.end())
	{
		if (*it % 2 == 0)
		{
			v.erase(it);
		}

		++it;
	}*/

	auto it = v.begin();
	while (it != v.end())
	{
		if (*it % 2 == 0)
		{
			it = v.erase(it);
		}
		else
		{
			++it;
		}
	}

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

void Test7()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(4);


	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

	vector<int> v1(v);
	v[0] *= 10;

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;

	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;
}

void Test8()
{
	string s("hello world");
	vector<int> vs(s.begin(), s.end());
	for (auto e : vs)
	{
		cout << e << " ";
	}
	cout << endl;

	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(4);

	vs = v;  // 赋值重载
	vector<int> copy = v; // 等价于copy(v) 

	vs[0] *= 10;
	for (auto e : vs)
	{
		cout << e << " ";
	}
	cout << endl;

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

void Test9()
{
	/*int i = 0;
	int j = int();
	int k = int(10);*/

	vector<int> v1(10);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	// 休息到11:34继续
	// int int
	//vector<int> v2(10, 1);
	/*for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;*/

	// int char
	vector<char> v3(10, 'a');

	for (auto e : v3)
	{
		cout << e << " ";
	}
	cout << endl;
}

void Test10()
{
	vector<int> v1;
	v1.resize(10, 0);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

	//std::vector<int> v2;
	vector<int> v2;
	v2.reserve(10);
	v2.push_back(1);
	v2.push_back(2);
	v2.push_back(3);
	v2.push_back(4);
	v2.push_back(5);

	v2.resize(8, 8);
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;

	v2.resize(20, 20);
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;

	v2.resize(3);
	for (auto e : v2)
	{
		cout << e << " ";
	}
	cout << endl;
}


//int main()
//{
//	Test2();
//
//	return 0;
//}

//int main()
//{
//	vector<int> v1;
//	vector<int> v2(10, 1);
//	vector<int> v3(v2);
//	vector<int> v4(v2.begin(), v2.end());
//
//	string str("hello world");
//	vector<char> v5(str.begin(), str.end());
//	return 0;
//}


//137. 只出现一次的数字 II
class Solution {
public:
	int singleNumber(vector<int>& nums) {
		size_t i = 0;
		for (; i < nums.size(); ++i)
		{
			int cnt = 0;
			for (size_t j = 0; j < nums.size(); ++j)
			{
				if (nums[i] == nums[j])
				{
					cnt++;
				}
				if (cnt == 1 && j == nums.size() - 1)
				{
					return nums[i];
				}
			}
		}
		return nums[i];
	}
};

int main()
{
	Solution s;

	vector<int> v = { 2, 2, 3, 2};

	cout << s.singleNumber(v);

	return 0;
}

//class Solution {
//public:
//	vector<int> singleNumber(vector<int>& nums) {
//		int sum = 0;
//		for (const auto& e : nums)
//		{
//			sum ^= e;
//		}
//		int cnt = 0;
//		for (int i = 0;i < 32;++i)
//		{
//			if (sum & (1 << i))// 第几位是1结果就是1
//			{
//				cnt = i;// 记录下来
//			}
//		}
//		vector<int> v = { 0,0 };// C++11的初始化,类似数组
//		for (const auto& e : nums)
//		{
//			if (e & (1 << cnt))
//			{
//				v[0] ^= e;
//			}
//			else
//			{
//				v[1] ^= e;
//			}
//		}
//		return v;
//	}
//};